草庐IT

【Example】C++ STL 常用容器概述

全部标签

具有 4 字节对齐缓冲区的 C++ `std::string` 类容器

我需要一个C++中的数据结构,它的作用类似于标准的字节容器,但将缓冲区对齐为四个字节的倍数。我想尽可能多地重用标准库抽象,而不是滚动我自己的抽象。到目前为止,我一直在使用std::string和std::vector来达到这个目的。不幸的是,我收到了有关最新MacOS的错误报告,显然string::data()不再是4字节对齐的,而是地址与1mod4一致。当我看到这个时,我当然没有意识到规范保证字符串将按4字节对齐。我可以切换到vector,但不幸的是现在我不确定为什么这应该是4字节对齐的。即使使用自定义分配器,vector实现也可能在它分配的缓冲区开始时做一些奇怪的事情。我的问题:从

c++ - STL 容器的右值引用限定符

为什么元素访问STL容器的成员函数,例如std::array::operator[]或std::vector::operator[]没有右值引用限定符重载?我当然可以做到std::move(generate_vector()[10]),但我很好奇在标准化引用限定符时是否考虑添加右值引用限定符重载。我认为std::array和std::tuple实际上是同一件事,后者的“元素访问函数(即std::get)”对于const与非const以及左值与右值的所有组合都重载了。为什么不是前者?将右值引用限定的元素访问成员函数(返回右值引用)添加到我的自定义容器是个好主意吗?编辑RichardCri

c++ - 指向 boost 指针容器中元素的指针

我刚刚开始使用boost::ptr_vector。我有一个ptr_vectorpctr作为一个类A的成员,并希望另一个类B引用pctr中的元素。在构造B类对象时,我想在pctr中存储一个指针。由于指针容器不允许访问指针(但只能访问引用),我必须从pctr中获取引用的地址,然后将其存储在类型B的对象中。但是获取引用的地址似乎不直观。有更好的选择吗? 最佳答案 正如您所发现的,boost指针容器可以很好地保护它们的指针。当然,您可以通过获取它将产生的引用的地址来打败它,但请注意,您可能会通过卡在这些指针上来削弱指针容器对权威所有权的声明

C++容器问题

我正在寻找一些合适的2D元素容器。我想要的是使用例如BOOST_FOREACH遍历容器的每个元素的能力,我还希望能够构建我的容器的subview(切片/子范围),并且可能迭代也通过他们。现在我正在使用boost::numeric::ublas::matrix来实现这些目的,但是,它对我来说并不是一个好的解决方案,因为,它是一个BLAS矩阵,尽管它作为一个普通的2d元素容器表现得非常好(自定义unbounded/bounded存储也很不错)。另一种boost替代方法boost::multi_array不好,因为您无法使用一个BOOST_FOREACH遍历每个元素声明,因为构造View的语

深入理解Selenium:常用方法和操作详解

前言大家好,我是chowley,今天来复习一下Selenium的常用方法,并结合实战演练来加深记忆。SeleniumSelenium是软件测试领域中最受欢迎的自动化测试工具之一,它提供了丰富的方法和操作来模拟用户在Web应用程序中的交互行为。本篇博客将深入介绍Selenium中常用的方法和操作,帮助软件测试读者更好地利用Selenium进行自动化测试。定位元素Selenium提供了多种方法来定位Web页面中的元素,包括通过ID、名称、XPath表达式、CSS选择器等。find_element_by_id(id):通过元素ID定位元素。find_element_by_name(name):通过元

c++ - STL 和 UTF-8 文件输入/输出。怎么做?

我将wchar_t用于内部字符串,将UTF-8用于存储在文件中。我需要使用STL将文本输入/输出到屏幕,还需要使用完整的立陶宛字符集。这一切都很好,因为我没有被迫对文件做同样的事情,所以下面的例子很好地完成了工作:#include#include#include_setmode(_fileno(stdout),_O_U16TEXT);wcout但我很好奇,并试图对文件做同样的事情,但没有成功。当然,我可以使用格式化的输入/输出,但那是……气馁。FILE*fp;_wfopen_s(&fp,L"utf-8_out_test.txt",L"w");_setmode(_fileno(fp),_

c++ - 带有标准容器的 std::shared_ptr

我有一个容器shared_ptrs和我将这些对象交给WindowsAPI,稍后我使用原始ptr获得回调。我要找对shared_ptr事后。这可以用shared_ptr干净地完成吗?(不使用shared_from_this())。非常基本的例子:classCFoo{};typedefstd::shared_ptrCFooPtr;typedefstd::setCFooSet;externCFooSetm_gSet;voidSomeWindowsCallBack(CFoo*pRawPtr){m_gSet.erase(pRawPtr);}我知道这可以用intrusive_ptr来完成很容易,但

c++ - Boost 的无序容器对于读取来说是线程安全的吗?

例如,对于MSVC,read-onlyisthread-safeoncontainers.对于只读,boost是否同样是线程安全的?更新:即,我们能否期望“const”方法保证多线程使用不会损坏内存。 最佳答案 即将发布的标准定义了所有标准的线程安全容器,如果提升,我会感到非常惊讶实现不符合此保证。特别是,你应该能够从容器的任何实例中读取任何线程,只要没有线程正在修改容器。 关于c++-Boost的无序容器对于读取来说是线程安全的吗?,我们在StackOverflow上找到一个类似的问题

c++ - 交换容器中两个迭代器的位置

我想交换两个迭代器first和second在容器中的位置,并在运行后保持它们有效。此外,如果我有迭代器other指向与first相同的值,我也想保持它有效(保持它指向相同的值)。是否可以使用任何STL容器实现? 最佳答案 你试过交换它们吗?#include//...swap(first,second);(在C++0x中,#include显着较小的header就足够了。)MoreoverifIhaveiteratorotherpointingatthesamevalueasfirstIwanttokeepitvalidtoo(keep

c++ - STL Vectors 和 new 运算符

这个问题应该很简单,也许很愚蠢,但我就是找不到问题。基本上,我必须解析一些自然语言的句子。我需要实现一个简单的算法来操纵“block”。一个Block由2个Pseudosentences组成,Pseudosentences由20个单词(字符串)组成。代码如下:typedefvectorPseudosentence;#defineW20//APseudosentenceismadeofWwords#defineK2//AblockismadeofKPseudosentencesclassBlock{public:vectorp;multimapScoremap;Block(){p.res